from flask import Blueprint, redirect, url_for, request, abort, make_response, render_template
other = Blueprint('other', __name__)


@other.route('/')
def hello_world():
    return 'Hello World!'


# 动态路由,可指定类型<type:name>
# @app.route('/id/<any(5,7,9):id>')  使用any限制动态参数
@other.route('/id/<int:id>/')
def get_id(id):
    # return "hello {ID}".format(ID=id)
    # url_for()函数对于动态构建特定函数的URL非常有用,
    # 该函数接受函数的名称作为第一个参数，以及一个或多个关键字参数，每个参数对应于URL的变量部分
    return redirect(url_for('get_name', name=id))


# 默认情况下，Flask路由响应GET请求,可通过路由装饰器指定访问方式
@other.route('/name/<name>/', methods=['GET', 'POST'])  # 类型默认是string
def get_name(name):
    # request能获取请求信息
    if request.method == 'POST':
        print("表单数据:", request.form['name'])
    else:
        pass
    # abort() 函数提前中断一个请求并带有一个错误代码
    # abort(500, "error")
    # make_response() 封装返回表达式，获取结果对象,可添加其他参数,如cookie,headers
    resp = make_response(render_template('error.html'), 404)
    resp.headers['name'] = 'Tom'
    return resp


@other.route('/json/')
def json():
    return {"name": "Sam"}



